#include "libFSServer.h"


uint8_t iniciarPrograma(archConfig_t *archConfig){
	//TODO modificar los parametros de leerArchivoConfiguracion
	uint8_t error =	leerArchivoConfiguracion(archConfig,1);
	if(!error){
		error = inicializarDisco(archConfig->pathDisco);
		if(!error){
			inicializarDatosSockets(archConfig->IP, archConfig->puerto, archConfig->cantConexiones);

			signal(SIGINT, finalizacion);
			signal(SIGINT, finalizacion);
		}
	}
	return error;
};




void ejecutarPrograma(){
	servidor((void*) &procesarPedidoCliente);
}

void finalizarPrograma(archConfig_t archConfig){
	free(archConfig.IP);
	free(archConfig.pathDisco);
	finalizacion(0);
}

void finalizacion(int32_t signal){
	cerrarArchivoLog();
	finalizarExtended2();
	finalizarDatosSockets();
	finalizarDisco();
}




/*superBloque_t leerSuperBloque(FILE* particion){
	superBloque_t superBloque;
	fseek(particion, 1024, SEEK_SET);
	char* contenido = malloc(1024);
	fread(contenido, sizeof(char), 1024, particion );
	memcpy(&(superBloque.cantidadDeInodos), contenido, 4);
	memcpy(&(superBloque.cantidadDeBloques), (contenido + 4), 4);
	memcpy(&(superBloque.cantidadDeBloquesNoAsignados), (contenido + 12) ,4);
	memcpy(&(superBloque.cantidadDeInodosNoAsignados),(contenido + 16) , 4);
	memcpy(&(superBloque.numeroDeBloqueConSuperbloque),(contenido + 20),4);
	memcpy(&(superBloque.bloquesPorGrupo),(contenido + 32),4);
	memcpy(&(superBloque.fragmentosPorGrupo),(contenido + 36),4);
	memcpy(&(superBloque.inodosPorGrupo),(contenido + 40),4);
	return superBloque;
}*/

/*groupDescriptor_t cargarGroupDescriptor(char* contenido, uint8_t grupo){
	groupDescriptor_t descriptor;
	memcpy(&(descriptor.direccionBitmapBloque) , contenido + (32 * grupo), 4);
	memcpy(&(descriptor.direccionBitmapInodo) , (contenido + 4 + (32 * grupo)), 4);
	memcpy(&(descriptor.inicioDireccionTablaDeinodos) , (contenido + 8 +(32 * grupo)) , 4 );
	memcpy(&(descriptor.cantidadDeBloquesSinAsignar) , (contenido + 12 + (32 * grupo)), 2);
	memcpy(&(descriptor.cantidadDeInodosSinAsignar) , (contenido +14 + (32 * grupo)), 2);
	memcpy(&(descriptor.cantidadDeDirectorios) , (contenido + 16 + (32 * grupo)), 2);
	return descriptor;
}


void leerGroupDescriptor(FILE* particion, uint8_t cantidadDeGrupos, groupDescriptor_t *groupDescriptor){

	fseek(particion, 1024, SEEK_SET);
	char* contenido = malloc(32 * cantidadDeGrupos);
	fread(contenido, 32,(32 * cantidadDeGrupos) , particion);
	uint8_t i;
	for(i = 0; i < cantidadDeGrupos; i++){
		groupDescriptor[i] = cargarGroupDescriptor(contenido,i);
	}
	return;
}

grupoDeBloques_t leerGrupoDeBloques(FILE* particion, superBloque_t superBloque, groupDescriptor_t descriptorDeGrupo){
	fseek(particion, , SEEK_SET);
	grupoDeBloques_t grupoDeBloques;
	uint32_t offset = sizeof(descriptorDeGrupo);
	memcpy(&(grupoDeBloques.bitmapDeBloques), , 1024);
	return grupoDeBloques;
}
*/


